<?php

/**
 * Created by PhpStorm.
 * User: s.utkin
 * Date: 28.08.14
 * Time: 11:30
 */
namespace Users\Workers;

use Messenger\Groups;
use \Log;
use NotificationDelivery\Queue;
use Pinenut\Queue\ProcessingQueue;
use Users\Queue\Worker;

class OnlineChangeAction extends Worker {

	/**
	 * Создает уведомления для всех онлайн-собеседников группы о приходе нового сообщения
	 *
	 * @param ProcessingQueue $item
	 *        	- элемент очереди
	 * @return bool
	 */
	public function process(ProcessingQueue $item) {
		// идентификатор пользователя
		$subscriber = (string) $item->data['subscriber'];
		
		// статус
		$state = (int) $item->data['state'];
		
		// для фильтрации в списках устанавливаю признак онлайн пользователя
		$profileIndex = \Users\Profile\Index::find()->where('profile._ref', 
			$subscriber)->one();
		$profileIndex->onlineStatus = $state;
		$profileIndex->save();
		
		// Пытается загрузить модель группы переписки
		/**
		 *
		 * @var Groups[] $groups
		 */
		$groups = Groups::getList([
			$subscriber
		]);
		
		foreach ($groups as $group) {
			if ($group->relations->isEmpty()) {
				continue;
			}
			
			foreach ($group->relations as $userId => $relation) {
				if ($userId == $subscriber) {
					continue;
				}
				
				// Добавляем в очередь новое уведомление
				Queue::enqueue(
					[
						'type' => \NotificationDeliveryConfig::TYPE_SEND_TO_RECEIVER,
						'subscriber' => $userId,
						'data' => [
							'eventName' => 'onlineChange',
							'eventData' => [
								'subscriber' => $subscriber,
								'state' => $state
							]
						]
					]);
			}
		}
		
		return true;
	}
}